﻿
package com.sqstudio.util
{

/**
 * 字符串工具类  
 * @author Nestor
 * 
 */
public class StringUtil
{

    //--------------------------------------------------------------------------
    //
    //  Class methods
    //
    //--------------------------------------------------------------------------

    /**
     *  删除字符串首尾的空格
     *
     *  @param str 所给的字符串
     *  @return 返回首尾不含空格的字符串
     */
    public static function trim(str:String):String
    {
        if (str == null) return '';
        
        var startIndex:int = 0;
        while (isWhitespace(str.charAt(startIndex)))
            ++startIndex;

        var endIndex:int = str.length - 1;
        while (isWhitespace(str.charAt(endIndex)))
            --endIndex;

        if (endIndex >= startIndex)
            return str.slice(startIndex, endIndex + 1);
        else
            return "";
    }
    
    /**
     *  
     *  字符串value被 delimiter 拆分为数组，删除数组每一项首尾的空格
	 * 例如： <pre>
	 *		var str:String = "字符串 测试 字符串 测试 字符串";
	 *		trace(StringUtil.trimArrayElements(str,"测试"));
	 * 		//输出：字符串测试字符串测试字符串
	 *    </pre>
     *  @param value  被拆分的字符串
     *
     *  @param separator  拆分依据
     *
     *  @return 返回一个子字符串 delimiter两边都不含空格的新的字符串
	 * 
	 * 	
     */
    public static function trimArrayElements(value:String, delimiter:String):String
    {
        if (value != "" && value != null)
        {
            var items:Array = value.split(delimiter);
            
            var len:int = items.length;
            for (var i:int = 0; i < len; i++)
            {
                items[i] = StringUtil.trim(items[i]);
            }
            
            if (len > 0)
            {
                value = items.join(delimiter);
            }
        }
        
        return value;
    }

    /**
     *  检测字符串中是否包含  空格(" ")、制表符Tab("\t")、回车符("\r")、换行符("\n")和换页符("\f")
     *
     *  @param str 所给的需要检测的字符串 
     *
     *  @return 包含任一字符  <code>true</code> ; 都不包含  <code>false</code>
     */
    public static function isWhitespace(character:String):Boolean
    {
        switch (character)
        {
            case " ":
            case "\t":
            case "\r":
            case "\n":
            case "\f":
                return true;

            default:
                return false;
        }
    }

	/**
	 * 将字符串str中的{n}替换为传入的参数
	 *例如： <pre>
	 *	var str:String = "here is some info '{0}' and {1}";
	 *	trace(StringUtil.substitute(str, 15.4, true));
	 * 	//输出："here is some info '15.4' and true"
	 *    </pre>  
	 * @param str 需要被替换的字符串
	 * @param rest 用来替换str 的参数
	 * @return  返回替换好的新字符串
	 * 
	 */	
    public static function substitute(str:String, ... rest):String
    {
        if (str == null) return '';
        
        var len:uint = rest.length;
        var args:Array;
        if (len == 1 && rest[0] is Array)
        {
            args = rest[0] as Array;
            len = args.length;
        }
        else
        {
            args = rest;
        }
        
        for (var i:int = 0; i < len; i++)
        {
            str = str.replace(new RegExp("\\{"+i+"\\}", "g"), args[i]);
        }

        return str;
    }
}

}
